package com.gagakuai.concurrent.locks;

import java.util.concurrent.TimeUnit;

/*
 * 定义锁的API
 */
public interface Lock {

    /*
     * 获取锁，允许阻塞带有中断标志的锁
     */
    void lock();

    /*
     * 获取锁，不允许阻塞带有中断标志的
     */
    void lockInterruptibly() throws InterruptedException;

    /*
     * 申请锁，只申请一次，失败后不尝试
     */
    boolean tryLock();

    /*
     * 申请锁，不允许阻塞带有中断标记的线程（一次失败后，带着超时标记继续申请）
     */
    boolean trylock(long time, TimeUnit timeUnit);

    void unlock();

    /*
     * 获取条件队列
     */
    Condition newCondition();

}
